package com.wgy.day42.数据库连接池.druid工具类;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*

Druid 连接池的工具类:

1.定义一个工具类
2.提供静态代码块加载配置文件,初始化连接池对象
3.提供方法:
   1.获取连接方法:通过数据库连接池获取连接
   2.释放资源
   3.获取连接池的方法

*/
public class JDBCUtils {
    private static DataSource ds;

    static{

       try {//1.配置文件
           //2.加载配置文件
           InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("Druid.properties");
           Properties pro =new Properties();
           pro.load(is);
           //3.获取连接池对象
           ds = DruidDataSourceFactory.createDataSource(pro);
           //4.获取连接对象
           Connection conn = ds.getConnection();


       } catch (IOException e) {
           e.printStackTrace();
       } catch (Exception e) {
           e.printStackTrace();
       }

   }

   //定义一个获取连接的方法
    public static Connection getConnection() throws SQLException {
       return ds.getConnection();
    }

   //定义一个获取连接池的方法
   public static DataSource getDataSource() {
       return ds;
   }

   //定义一个释放资源的方法
   public static void close(ResultSet rs,Statement stmt, Connection conn) {
       if(rs!=null){
           try {
               rs.close();
           } catch (SQLException throwables) {
               throwables.printStackTrace();
           }

       }
       if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }

        }
       if(conn!=null){
           try {
               conn.close();//归还连接对象到连接池
           } catch (SQLException throwables) {
               throwables.printStackTrace();
           }

       }
   }
    //定义一个释放资源的方法
    public static void close(Statement stmt, Connection conn) {
        close(null,stmt,conn);
    }
}
